package com.baibei.ebec.sdk;


import com.baibei.model.KLineEntry;
import com.baibei.model.MinuteEntry;
import com.baibei.model.QuotationInfo;
import com.baibei.model.TradeTimeInfo;

import java.util.List;

import io.reactivex.Observable;
import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.POST;

/**
 * 行情接口
 * Created by ChenRui on 2017/5/18 0018 11:27.
 */
public interface IQuotationApi {

    String TYPE_MINUTE = "1";
    String TYPE_KLINE_DAY = "6";
    String TYPE_KLINE_5 = "2";
    String TYPE_KLINE_15 = "3";
    String TYPE_KLINE_30 = "4";
    String TYPE_KLINE_60 = "5";


    /**
     * 获取分时图数据
     *
     * @param productId 产品代码
     * @param klineType 写死的，传{@link #TYPE_MINUTE}
     * @return
     */
    @POST(ApiConstant.API_QUOTATION_KLINE)
    @FormUrlEncoded
    Observable<List<MinuteEntry>> getMinuteData(@Field("productId") String productId, @Field("type") String klineType);


    /**
     * 获取K线数据
     *
     * @param productId 产品代码
     * @param klineType 类型参考：TYPE_KLINE_*
     * @return
     */
    @POST(ApiConstant.API_QUOTATION_KLINE)
    @FormUrlEncoded
    Observable<List<KLineEntry>> getKLineData(@Field("productId") String productId, @Field("type") String klineType);

    /**
     * 获取K线数据(一周数据)
     *
     * @param productId 产品代码
     * @param klineType 类型参考：TYPE_KLINE_*
     * @return
     */
    @POST(ApiConstant.API_QUOTATION_KLINE_FORWEEK)
    @FormUrlEncoded
    Observable<List<KLineEntry>> getKLineForweekData(@Field("productId") String productId, @Field("type") String klineType);

    /**
     * 获取实时行情
     *
     * @param productCode 产品代码
     */
    @POST(ApiConstant.API_QUOTATION_INFO)
    @FormUrlEncoded
    Observable<List<QuotationInfo>> getQuotationInfo(@Field("productIds[]") List<String> productCode);


    /**
     * 查询产品的价格信息
     *
     * @param productId 产品ID
     */
    @POST(ApiConstant.API_PRODUCT_PRICE_INFO)
    @FormUrlEncoded
    Observable<QuotationInfo> getProductPrice(@Field("productId") String productId);

    /**
     * 是否开市
     */
    @POST(ApiConstant.API_TRADE_STATUS)
    Observable<TradeTimeInfo> getTradeTimeInfo();
}
